home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
lang_c
/
cgraphix
/
cmovpoly.c
< prev
next >
Wrap
Text File
|
1986-05-28
|
3KB
|
158 lines
/* «RM120»«PL99999»«TS4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76» */
#include <stdio.h>
#define EXTERN extern
#include <typedef.h>
int ArrowAngle;
int Ch, cont;
PlotArray Arrow;
double CurrX,CurrY,IncrX,IncrY,Size,Speed;
double ArrowIncr[16];
void MakeArrow()
{
Arrow[0] = 0;
Arrow[1] = 0;
Arrow[2] = Size;
Arrow[3] = -Size;
Arrow[4] = 0;
Arrow[5] = Size;
Arrow[6] = -Size;
Arrow[7] = -Size;
Arrow[8] = 0;
Arrow[9] = 0;
}
void MakeMoveTable()
{
ArrowIncr[0] = 0;
ArrowIncr[1] = 1;
ArrowIncr[2] = -1;
ArrowIncr[3] = 1;
ArrowIncr[4] = -1;
ArrowIncr[5] = 0;
ArrowIncr[6] = -1;
ArrowIncr[7] = -1;
ArrowIncr[8] = 0;
ArrowIncr[9] = -1;
ArrowIncr[10] = 1;
ArrowIncr[11] = -1;
ArrowIncr[12] = 1;
ArrowIncr[13] = 0;
ArrowIncr[14] = 1;
ArrowIncr[15] = 1;
}
void MoveForward()
{
SetColorBlack();
DrawPolygon(Arrow,0,-5,0,0,0);
CurrX = CurrX+IncrX;
CurrY = CurrY+IncrY;
TranslatePolygon(Arrow,5,IncrX,IncrY);
SetColorWhite();
DrawPolygon(Arrow,0,-5,0,0,0);
}
void MoveBack()
{
SetColorBlack();
DrawPolygon(Arrow,0,-5,0,0,0);
CurrX = CurrX-IncrX;
CurrY = CurrY-IncrY;
TranslatePolygon(Arrow,5,-IncrX,-IncrY);
SetColorWhite();
DrawPolygon(Arrow,0,-5,0,0,0);
}
void TurnLeft()
{
SetColorBlack();
DrawPolygon(Arrow,0,-5,0,0,0);
RotatePolygon(Arrow, 5, 45.);
ArrowAngle = ArrowAngle+1;
if (ArrowAngle > 7)
ArrowAngle = 0;
IncrX = Speed * ArrowIncr[2 * ArrowAngle];
IncrY = Speed * ArrowIncr[2 * ArrowAngle + 1];
SetColorWhite();
DrawPolygon(Arrow,0,-5,0,0,0);
}
void TurnRight()
{
SetColorBlack();
DrawPolygon(Arrow,0,-5,0,0,0);
RotatePolygon(Arrow, 5, -45.);
ArrowAngle = ArrowAngle-1;
if (ArrowAngle < 0)
ArrowAngle = 7;
IncrX = Speed * ArrowIncr[ArrowAngle * 2];
IncrY = Speed * ArrowIncr[ArrowAngle * 2 + 1];
SetColorWhite();
DrawPolygon(Arrow,0,-5,0,0,0);
}
main()
{
InitGraphic();
DefineWindow(1,0,0,XMaxGlb,YMaxGlb);
DefineWorld(1, -1000., -1000., 1000., 1000.);
SelectWorld(1);
SelectWindow(1);
SetBackground(0);
Size = 100;
Speed = 30;
CurrX = 0;
CurrY = 0;
ArrowAngle = 0;
IncrX = 0;
IncrY = Speed;
MakeArrow();
MakeMoveTable();
DrawPolygon(Arrow,0,5,0,0,0);
cont = 1;
while(cont) {
Ch = inkey();
switch(Ch) {
case '8':
case -72:
MoveForward();
break;
case '4':
case -75:
TurnLeft();
break;
case '6':
case -77:
TurnRight();
break;
case '2':
case -80 :
MoveBack();
break;
case ' ':
cont = 0;
break;
default:
break;
}
}
LeaveGraphic();
}